home *** CD-ROM | disk | FTP | other *** search
Text File | 1996-07-13 | 6.2 KB | 179 lines | [TEXT/ds30] |
- /*
- Author: Dirk Strack
-
- execute file "iostat";
-
- absolute bytezahlen im interval messen and ausgeben:
- iostat(1,1000,1);
-
- byte pro sekunde im interval messen and ausgeben:
- iostat(10,10,2);
-
- statistic struktur auflisten:
- iostat(0,1,3);
- */
-
- declare boolean iostat_first_access = $true;
- declare cursor io_x, io_y;
-
- declare procedure iostat(interval, loops, mode)
- argument float interval = 1;
- argument integer loops = 10;
- argument float mode = 1;
- {
- declare cursor odb;
- declare timestamp start;
- declare float TimeLimit, DelayTime;
- declare integer title_cnt = 0;
- declare integer i, TicksUsedCount, ConnectionsBytesRead, ConnectionsBytesWritten,
- DiskBytesRead, DiskBytesWritten, FilesOpenedCount, StatementCreatedCount,
- ProcessesCreatedCount, TransactionsCreatedCount, ResultReadCount,
- ResultWriteCount, ResultAccessCount, PageCacheHitCount, PageCacheMissCount;
-
- if (iostat_first_access or interval > 0)
- {
- errorctl 1;
- open database Master;
- errorctl 0;
- select * from Master!System.SysStatistics into io_x for extract;
- }
- if (mode = 3)
- {
- describe open dbms into odb;
- fetch of odb;
-
- print " SysStatistics for ", odb->brand;
- fetch first of io_x;
- for (i = 1; i <= $cols(io_x); i++)
- printf("\n%-30s : %10s", $colname(io_x,i), io_x->:i);
- print "";
- return;
- }
- iostat_first_access = $true;
- TimeLimit = (float $now()) + interval;
- while (loops > 0)
- {
- if (title_cnt == 0)
- {
- title_cnt = 20;
- switch (mode)
- {
- case 1:
- printf("\n LTime HTime Delay Activ\% CommIn -Out -Active DiskIn Out StatC StatQ ProcC ProcQ TransC TransQ ResIO ResAcc CacheHit Miss\n");
- break;
- case 2:
- printf("\n Time Server Conn KB/Sec Disk KB/Sec Transactions Statements Memory ResultCache PageCache");
- printf("\n Active\% In Out In Out Sec Act Que Sec Act Que Used\% Used\% Hit\% Used\% Hit\%\n");
- }
- }
-
- do
- DelayTime = (float $now()) - TimeLimit;
- while(DelayTime < 0);
- if (DelayTime > 1e0)
- TimeLimit = (float $now());
-
- select * from Master!System.SysStatistics into io_y for extract;
- fetch first of io_x;
- fetch first of io_y;
-
- TicksUsedCount = io_y->TicksUsedCount - io_x->TicksUsedCount;
- if (TicksUsedCount != 0)
- {
- loops = loops - 1;
- title_cnt = title_cnt - 1;
-
- DelayTime = (float io_y->HostTime) - (float io_x->HostTime);
- ConnectionsBytesRead = io_y->ConnectionsBytesRead - io_x->ConnectionsBytesRead;
- ConnectionsBytesWritten = io_y->ConnectionsBytesWritten - io_x->ConnectionsBytesWritten;
- DiskBytesRead = io_y->DiskBytesRead - io_x->DiskBytesRead;
- DiskBytesWritten = io_y->DiskBytesWritten - io_x->DiskBytesWritten;
- FilesOpenedCount = io_y->FilesOpenedCount - io_x->FilesOpenedCount;
- StatementCreatedCount = io_y->StatementCreatedCount - io_x->StatementCreatedCount;
- ProcessesCreatedCount = io_y->ProcessesCreatedCount - io_x->ProcessesCreatedCount;
- TransactionsCreatedCount= io_y->TransactionsCreatedCount - io_x->TransactionsCreatedCount;
- ResultReadCount = io_y->ResultReadCount - io_x->ResultReadCount;
- ResultWriteCount = io_y->ResultWriteCount - io_x->ResultWriteCount;
- ResultAccessCount = io_y->ResultAccessCount - io_x->ResultAccessCount;
- PageCacheHitCount = io_y->PageCacheHitCount - io_x->PageCacheHitCount;
- PageCacheMissCount = io_y->PageCacheMissCount - io_x->PageCacheMissCount;
-
- switch (mode)
- {
- case 1:
- printf("%8.8s %8.8s %5s %6d %6d %6d %7d %7d %6d %6d %6d %6d %6d %6d %6d %6d %6d %6d %6d\n",
- time $now(),
- time io_y->HostTime,
- decimal[5,2] DelayTime,
- decimal[6,1] (TicksUsedCount / (DelayTime * io_y->TicksPerSecond) * 100),
- ConnectionsBytesRead - 384,
- ConnectionsBytesWritten - 206,
- io_y->ConnectionsActiveCount,
- DiskBytesRead, DiskBytesWritten,
- StatementCreatedCount - 1, io_y->StatementQueueCount, ProcessesCreatedCount,
- io_y->ProcessQueueCount,
- TransactionsCreatedCount - 1, io_y->TransactionQueueCount,
- ResultReadCount + ResultWriteCount,
- ResultAccessCount, PageCacheHitCount, PageCacheMissCount);
-
- if (io_y->TransactionQueueCount > 2 or (DiskBytesRead > 1048576 and interval = 1))
- {
- SELECT A.Type LockType, (varchar C.Name + "." + varchar B.Name) DBName,
- time D.StartTime StartTime,
- D.LockTimeout, D.QueueTime, (varchar[10] E.Query) Query,
- (varchar[10] F.UserName) UserName, F.Workstation
- FROM SysFileLocks A, SysFiles B,
- SysDatabases C, SysTransactions D,
- SysProcesses E, SysConnections F
- WHERE A.FileID = B.ID
- AND B.DatabaseID = C.ID
- AND A.TransactionID = D.ID
- AND D.ProcessID = E.ID
- AND E.ConnectionID = F.ID
- AND F.ID != $connid
- FOR EXTRACT;
- if ($rowcnt)
- {
- show;
- printf("\n");
- title_cnt = 0;
- }
- }
- break;
- case 2:
-
- if (ResultAccessCount = 0)
- ResultAccessCount = 1;
- if (PageCacheHitCount + PageCacheMissCount = 0)
- PageCacheHitCount = 1;
- printf("%8.8s %6s %8s %8s %8s %8s %6s %2d %2d %6s %2d %2d %6s %6s %6s %6s %6s \n",
- time io_y->HostTime,
- decimal[6,1] (TicksUsedCount / (DelayTime * io_y->TicksPerSecond) * 100),
- decimal[8,1] (ConnectionsBytesRead / DelayTime / 1024),
- decimal[8,1] (ConnectionsBytesWritten / DelayTime / 1024),
- decimal[8,1] (DiskBytesRead / DelayTime / 1024),
- decimal[8,1] (DiskBytesWritten / DelayTime / 1024),
- decimal[6,1] (TransactionsCreatedCount / DelayTime),
- io_y->TransactionsActiveCount,
- io_y->TransactionQueueCount,
- decimal[6,1] (StatementCreatedCount / DelayTime),
- io_y->ProcessQueueCount,
- io_y->StatementQueueCount,
- decimal[6,1] (float io_y->MemoryAllocated / float io_y->MemoryAllocationLimit * 100),
- decimal[6,1] (float io_y->ResultCacheUsed / float io_y->ResultCacheSize * 100),
- decimal[6,1] (float (ResultAccessCount - ResultReadCount) / float ResultAccessCount * 100),
- decimal[6,1] (float io_y->PageCacheUsed / float io_y->PageCacheSize * 100),
- decimal[6,1] (float PageCacheHitCount / float (PageCacheHitCount + PageCacheMissCount) * 100)
- );
- break;
- }
- }
- TimeLimit = TimeLimit + interval;
- deselect io_x;
- io_x = io_y;
- }
- iostat_first_access = $false;
-
- } end procedure iostat;
-
-